/**
 * kernel.c
 *
 * Gerencia o kernel do SO
 *
 * Criado em 22-09-10
 */

#include <kernel.h>
#include <paging.h>
#include <task.h>
#include <syscall.h>

// Inicia o sistema
inline void initializeSystem() {
	gdtInstall();
	idtInstall();
	isrsInstall();
	irqInstall();
	initializeVideo();

	timerInstall();

	keyboardInstall();

	__asm__ __volatile__ ("sti");
}

// Kernel do sistema operacional
void kmain() {

	onDebug();
	initializeSystem();

//	asm volatile ("int $0x3");
//	asm volatile ("int $0x4");

//	debug("inicializando syscalls");
//	initialise_syscalls();
//
//	debug("mudando para o user_mode");


//
//	char c[10];
//	    itoa((int) write_tss, c);
//	    println(c);
//	    itoa((int) t, c);
//	    println(c);
//	    println("bla");

//	debug("chamando println..");
//		println("Teste...");
//		print("Hello, user world!\n");
//
//	switch_to_user_mode();
//
//
//
//	debug("Chamando cli no kmain, no modo kernel");
//	cli();
//	debug("Chamando sti no kmain, no modo usuario");
//	sti();

//	t();
	//sti();

//	testePrint();
//	testeSti();

//	initialise_paging();
//	print("Hello, paging world!\n");

//	uint *ptr = (uint*)0xA0000000;
//	uint do_page_fault = *ptr;

	shell();

//	for (;;);
}
